最长公共字符串后缀java
时间: 2025-05-12 11:11:52 浏览: 19
### Java 实现最长公共字符串后缀
在解决最长公共字符串后缀问题时,可以采用多种方法来实现。以下是基于给定引用中的思路以及常见算法设计的一种解决方案。
#### 方法概述
为了找到多个字符串的最长公共后缀,可以通过以下方式完成:
1. 遍历所有输入字符串并提取它们的后缀部分。
2. 对这些后缀进行比较,找出共同的部分作为最终结果。
下面是一个完整的 Java 实现:
```java
import java.util.Scanner;
public class LongestCommonSuffix {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串数量 N:");
int N = sc.nextInt();
sc.nextLine(); // 清除换行符
String[] A = new String[N];
int minLength = Integer.MAX_VALUE;
for (int i = 0; i < N; i++) {
A[i] = sc.next();
minLength = Math.min(A[i].length(), minLength); // 记录最短字符串长度
}
String longestCommonSuffix = findLongestCommonSuffix(A, minLength);
System.out.println("最长公共后缀为:" + longestCommonSuffix);
}
private static String findLongestCommonSuffix(String[] strings, int minLength) {
StringBuilder suffixBuilder = new StringBuilder();
// 假设第一个字符串的后缀是最长公共后缀
String firstStringReversed = reverse(strings[0]);
boolean allMatched = true;
for (int i = 0; i < minLength; i++) {
char currentChar = firstStringReversed.charAt(i);
for (int j = 1; j < strings.length; j++) {
if (reverse(strings[j]).charAt(i) != currentChar) {
allMatched = false;
break;
}
}
if (!allMatched) {
break;
} else {
suffixBuilder.append(currentChar);
}
}
return reverse(suffixBuilder.toString());
}
private static String reverse(String str) {
return new StringBuilder(str).reverse().toString();
}
}
```
#### 关键点解析
上述代码实现了通过反转字符串的方式来简化后缀匹配的过程[^1]。具体来说:
- **反转操作**:由于我们需要处理的是后缀而不是前缀,因此将每个字符串反转后再执行逐位对比会更加直观。
- **最小长度约束**:为了避免越界访问,程序只会在最短字符串范围内进行字符逐一验证。
- **复杂度分析**:该算法的时间复杂度主要取决于输入字符串的数量 `N` 和其平均长度 `L`,总体上大约为 O(N * L)[^3]。
#### 示例运行
假设我们有如下输入:
```
3
baba
aba
cba
```
经过计算可得输出应为 `"a"` 或者更复杂的场景下返回相应的最长公共后缀[^4]。
---
阅读全文
相关推荐

















