LeetCode-161.One Edit Distance (JAVA)一次编辑距离

161.One Edit Distance

Given two strings S and T, determine if they are both one edit distance apart.

这道题只让我们判断两个字符串的编辑距离是否为1,那么我们只需分下列三种情况来考虑就行了:

1. 两个字符串的长度之差大于1,那么直接返回False

2. 两个字符串的长度之差等于1,那么长的那个字符串去掉一个字符,剩下的应该和短的字符串相同

3. 两个字符串的长度之差等于0,那么两个字符串对应位置的字符只能有一处不同。

	public boolean isOneEditDistance(String s, String t) {
		// 让s指向长的字符串
		if (s.length() < t.length()) {
			String tmp = s;
			s = t;
			t = tmp;
		}
		int m = s.length();
		int n = t.length();
		int diff = m - n;// diff>=0
		// 两个字符串的长度之差大于1,那么直接返回False
		if (diff >= 2) {
			return false;
			// 两个字符串的长度之差等于1,那么长的那个字符串去掉一个字符,
			// 剩下的应该和短的字符串相同
		} else if (diff == 1) {
			// 小于长度小的
			for (int i = 0; i < n; i++)
				// 到了i,说明0~i-1字符相等,
				// 只要判断剩下的是否相等即可
				if (s.charAt(i) != t.charAt(i))
					// s去掉一个字符,而t不变
					return s.substring(i + 1) == t.substring(i);

		} else {
			// 两个字符串的长度之差等于0,
			// 那么两个字符串对应位置的字符只能有一处不同。
			int cnt = 0;
			for (int i = 0; i < n; ++i)
				if (s.charAt(i) != t.charAt(i))
					++cnt;
			return cnt == 1;
		}
		return true;

	}
参考:https://segmentfault.com/a/1190000003906621

你可能感兴趣的:(leetcode)