移除相邻对儿 Remove Adjacent Pairs String

本文介绍了一种通过双指针技巧去除字符串中相邻重复字符的算法,并提供了完整的Java实现示例。该方法不仅解决了基本问题,还考虑了特殊情况如空字符串的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

举个例子:

ABCCBCBA ==> ACBA


思路比较简单,就是用一个基准指针和一个探索指针,不断比较,并把探索指针指向的元素拷到基准指针那里。

但要注意指针越界的问题,还有输入为空字符串的情况。


package String;

public class RemoveAdjacentPairs {

	public static void main(String[] args) {
//		String s = "ABCCBCBA";
//		String s = "";
		String s = "acbbcddc";
		System.out.println(removeAdjacentPairs(s));
	}
	
	
	public static String removeAdjacentPairs(String s) {
		int len = s.length();
		if(len == 0) {
			return s;
		}
		
		int cur = 0;			// 被比较对象
		char[] ss = s.toCharArray();
		for(int probe=1; probe<len; probe++) {	// 比较对象
			while(cur>=0 && probe<len && ss[probe]==ss[cur]) {
				probe++;
				cur--;
			}
			if(cur+1<len && probe>=0 && probe<len){
				cur++;
				ss[cur] = ss[probe];
			}
		}
		
		// cur+1为移除相邻相同字符后的长度,0为offset
		return new String(ss, 0, cur+1);
	}

}



如果要用递归的方法则参考:

http://www.geeksforgeeks.org/recursively-remove-adjacent-duplicates-given-string/





<think>我们正在讨论ArcGIS中的AdjacentPairs工具。用户询问该工具属于哪一类分析工具。根据之前的对话,我们知道AdjacentPairs是模型构建器中的一个工具,用于生成相邻要素对。现在需要明确其分类。 在ArcGIS中,工具通常按功能分类。AdjacentPairs的主要功能是识别空间上相邻的要素并生成记录这些相邻关系的表。这种操作属于空间关系分析(Spatial Relationship Analysis)的范畴,具体来说是拓扑分析(Topological Analysis)的一种,因为它涉及要素之间的邻接关系(一种拓扑关系)。 此外,由于它生成的是要素对表,这个工具也常用于网络分析(Network Analysis)的前期准备工作,例如构建道路网络的连通性。但工具本身属于空间分析工具集中的邻域分析(Neighborhood Analysis)或拓扑分析。 参考Esri官方文档,AdjacentPairs被归类为模型构建工具(ModelBuilder Tools)中的迭代工具(Iteration Tools),因为它通常在模型构建器中用于循环处理相邻要素对。但就功能而言,其核心是空间邻接关系分析。 因此,我们可以这样回答: AdjacentPairs工具属于空间分析(Spatial Analyst)工具集中的邻域分析(Neighborhood Analysis)或拓扑分析(Topological Analysis)工具。同时,它也是模型构建器(ModelBuilder)中的迭代工具(Iteration Tools)的一种。 注意:虽然它可能与网络分析有关联,但工具本身并不直接属于网络分析工具集。 同时,根据用户之前的问题,我们不需要重复详细的操作步骤,而是聚焦于分类。 接下来,生成相关问题: 1. 如何利用AdjacentPairs工具的输出进行网络连通性分析? 2. AdjacentPairs工具与拓扑检查工具(如Must Not Have Gaps)有何异同? 3. 在模型构建器中,AdjacentPairs工具与其他迭代工具(如For循环)如何配合使用?</think>### ArcGIS AdjacentPairs工具分类解析 AdjacentPairs是ArcGIS模型构建器(ModelBuilder)中的**空间关系迭代工具**,属于以下核心类别: 1. **拓扑分析工具** - 通过识别共享边界或邻近关系的要素对,分析空间拓扑邻接性 - 生成包含$From\_FID$和$To\_FID$字段的拓扑关系表[^1] - 应用场景:土地利用边界变化检测、生态廊道连通性分析 2. **模型构建器迭代工具** - 专为模型构建器设计的**要素对迭代器** - 在模型流程中自动遍历相邻要素对(如A-B, B-C, C-D等) - 支持与空间连接、字段计算等工具链式组合[^2] 3. **网络分析预处理工具** - 为网络数据集(如道路网)建立邻接关系基础表 - 输出表可直接用于: $$Network\_Edge = \{(From\_FID, To\_FID) | \text{要素间距} \leq \text{阈值}\}$$ - 典型应用:交通网络连通性分析、管线拓扑校验[^3] 4. **空间统计支持工具** - 提供空间自相关分析(如Moran's I)的邻接矩阵输入 - 通过`Group Field`参数实现分区统计(如不同行政区划的边界统计) > **工具定位图示**: > ```mermaid > graph LR > A[空间分析工具集] --> B(拓扑分析) > A --> C(网络分析) > D[模型构建器] --> E(迭代工具) > B & C & E --> F[AdjacentPairs] > ``` 该工具与常规空间分析工具(如Buffer、Near)的核心区别在于: - 输出**关系型数据表**而非空间要素 - 专为**流程自动化**设计,需在模型构建器中调用 - 强调**要素对的系统性遍历**而非单点分析[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值